<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        Promise.all([promise,promise,...])
        1. 参数是一个数组，数组的元素是promise对象
        2. 返回值是promise，所以有三个方法 then，catch，finally
        3. 当数组中的所有的 promise 都执行 resolve() 时， then 回调函数就会执行，否则执行 catch
        4. 执行的时间，等待所有的promise都调用了resolve或reject

        5.  then 回调函数参数值是一个 resolve 参数集合（数组）
        */
      const p1 = new Promise((resolve) => {
        setTimeout(() => {
          resolve("1");
        }, Math.random() * 1000);
      });
      const p2 = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve("2");
          //   reject(new Error("..."));
        }, Math.random() * 10000);
      });
      const p3 = new Promise((resolve) => {
        setTimeout(() => {
          resolve("3");
        }, Math.random() * 100);
      });
      Promise.all([p1, p2, p3])
        .then((data) => {
          console.log(data);
        })
        .catch((e) => {
          console.log(e);
        })
        .finally(() => {});
    </script>
  </body>
</html>
